/*
不利用size判断队列空或满
*/
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10

typedef struct Queue
{
    int data[MAXSIZE];
    int front, rear; // 队头指针和队尾指针
} Queue;

// 初始化队列
void InitQueue(Queue &Q)
{
    Q.rear = Q.front = 0;
}

// 判空
bool Empty(Queue &Q)
{
    if (Q.front == Q.rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 入队
bool InQueue(Queue &Q, int x)
{
    if ((Q.rear + 1) % MAXSIZE == Q.front)
    {
        return false;
    }
    else
    {
        Q.data[Q.rear] = x;
        Q.rear = (Q.rear + 1) % MAXSIZE; // 出队后再入队
        return true;
    }
}

// 出队
bool OutQueue(Queue &Q, int &x)
{
    if (Q.front == Q.rear)
    {
        return false;
    }
    else
    {
        x = Q.data[Q.front];
        Q.front = (Q.front + 1) % MAXSIZE;
        return true;
    }
}

// 获取队头元素
bool GetHead(Queue &Q, int &x)
{
    if (Q.rear == Q.front)
    {
        return false;
    }
    else
    {
        x = Q.data[Q.front];
        return true;
    }
}

int main()
{
    Queue Q;
    InitQueue(Q);
}